"use strict";
/*
自动化编译
tsc index 将ts文件转化为js文件，让浏览器识别
*/
//#region 限制变量类型
var msg;
var id;
var is;
msg = "hello";
id = 10;
is = true;
// console.log(msg,id,is);
//#endregion
//#region 限制返回值类型
function addMsg(x, y) {
    return x + y + "√";
}
var result = addMsg(1, 2);
// console.log(result);
//留给底层自动装箱使用
var msgs;
//#endregion
//#region any/unknown
//定义未使用undefined
let any1 = "hello world";
let un;
let msg1;
msg1 = any1;
var upper = any1.toUpperCase();
any1.money; //TypeError:Cannot create property 'money' on string 'hello world'
// console.log(upper);
// console.log(msg1);
//使用安全的unknown需要进行类型断言
msg1 = un;
msg1 = un;
//第一种断言方式if
if (typeof un === "string") {
    //使用unknown进行函数返回值断言
    un.toUpperCase();
}
//#endregion
//#region 函数never类型
/*
1、函数没有返回值，就返回undefined
2、函数never类型用于函数的递归调用，或者是非正常结束
3、never变量类型是由编译器推断
*/
function exception() {
    throw new Error("请联系管理员处理!!!");
}
var ever;
var ever1 = "hello world";
if (typeof ever1 === "string") {
    // console.log(ever1.toUpperCase());
}
else {
    console.log(ever1);
}
//#endregion
//#region undefined和void返回值区别
function undefined1() {
    return undefined;
}
var undefinedVar = undefined1();
// if(undefinedVar){
// }
function void1() {
    // return undefined;
    // return;
    // console.log("void1");
}
var voidVar = void1();
// 区别函数返回值不能被使用
// if(voidVar){
// }
//#endregion
//#region （动态属性对象）定义Object的索引签名，允许有任意数据的属性，键可变（string）
var obj1;
// obj1 = 1, object不包含基本数据类型
var obj2;
//Object只包含可以调用Object方法的任意类型
// obj2 = null
// obj2 = undefined
var obj3;
obj3 = {
    name: "zhangsan",
    age: 18,
    sex: 'male'
};
// console.log(obj3);
//#endregion
//#region 函数的声明;=>申明函数
var fun;
fun = function (x, y) {
    return x + y;
};
//lambda表达式;=>箭头函数
fun = (x, y) => {
    return x + y;
};
//#endregion
//#region 数组定义
var arr1;
var arr2;
arr1 = ["hello", "world"];
arr2 = [1, 2, 3];
// console.log(arr1);
//#endregion console.log(arr2);
//#region 元组定义
var arr3;
var arr4;
var arr5;
arr3 = ["hello", 1];
arr4 = [1, "hello", "word", "!"];
arr5 = ["word", false];
var printTest = function (val) {
    // console.log(val)
};
printTest("未知");
function StatusFun(val) {
    // console.log(val);
}
StatusFun(1);
const goodAndBad = {
    code: "初级",
    study: "初级",
    buy: 30,
    time: 70
};
const typeFun1 = function () {
    return 68;
};
var arrs = [1, 2, 3];
var arrs1 = [0];
//forEach是void，使用push会得到int返回值，目前把push的返回值作为forEach的返回值！
arrs.forEach((x) => arrs1.push(x));
//#endregion
